Networked systems generally transmit data between distributed nodes via some form of network connection, which typically comprises some form of physical link. Transmitted data is normally organized into units of data known as packets, with each packet typically consisting of smaller data units known as flits. Each flit, in-turn, generally comprises a data block, control/status bits (such as credits), and cyclic redundancy code (CRC) comprising a plurality of bits. CRC's are utilized by networked systems for transmission error detection. A sending node employs a logical function to calculate the CRC from the data block, and includes the CRC along with the data block and control/status bits to form the flit for transmission. Upon receiving the transmitted flit, a receiving node employs the logical function to calculate a CRC from the received data block. The calculated CRC not matching the transmitted CRC indicates that a link error occurred during transmission, and in response, a networked system typically initiates a link-layer “retry” mechanism to retransmit data from the sending node to the receiving node, beginning with the flit containing the transmission error.
CRC bits, however, generally notify a receiving node only of data block errors introduced during transmission via the network connection and do not provide notification of data block errors existing prior to transmission. In these situations, networked systems generally include error information as part of a flit to notify a receiving node that the transmitted data block itself contains erroneous information. For example, a sending node retrieving data from a memory source may detect a presence of an uncorrectable data error in the data retrieved from the memory. If the sending node simply transmits the corrupted data to the receiving node and no link errors occur during transmission, the transmitted data appears to the receiving node to be error-free data. To alert the receiving node that the transmitted data itself is corrupt, an error status bit is often included as one of the control/status bits of the transmitted flit. This error status bit is sometimes referred to as the “poison” bit. When a receiving node receives a flit with a “poison” bit indicating corrupted data, the receiving node is notified that the data block is corrupt even though the CRC indicates that the flit was received free from errors during transmission.
While a “poison” bit and other data status bits are effective at notifying a receiving node of a presence of corrupt data and other data abnormalities, they require a flit to either contain more bits or to dedicate fewer bits to other functions, including data transfer. Furthermore, when the errors for which they serve as notification are rarely occurring errors, such as corrupt source data described by the example above, the error and status bits often represent an inefficient use of limited bit capacity.
Since most networked systems typically already dedicate a number of bits of each flit for detection of transmission errors, which account for a large majority of data errors, it would be beneficial if these bits could also be used to notify a destination node of corrupt or source data. The bits formerly dedicated for use as control/status bits, including poison bits, could then be used to increase data transfer capacity or as additional CRC bits to improve detection and/or correction of link errors occurring during transmission. Many systems, particularly those having bandwidth constraints, would benefit from an error detection system not requiring dedicated bits to provide notification of rarely occurring data errors.